package cn.me.alphamq.broker.util;

import cn.me.alphamq.broker.cache.Container;
import cn.me.alphamq.common.constant.GlobalConstant;

import java.util.Random;

/**
 * 队列 id 的工具类
 *
 * @author f
 */
public class QueueIdUtil {

    /**
     * 随机队列 id 的生成器
     */
    private static final Random RANDOM = new Random();

    /**
     * 从传入的 topic 和 队列 id 中获取队列 id
     *
     * @param topic   队列所属的 topic
     * @param queueId 指定的队列 id
     * @return 如果传入的队列 id 不是默认的队列 id，则返回它；否则根据 topic 随机生成一个队列 id
     */
    public static int getQueueId(String topic, int queueId) {
        return queueId == GlobalConstant.DEFAULT_QUEUE_ID ?
                QueueIdUtil.genRandomQueueId(topic) :
                queueId;
    }

    /**
     * 从传入的 topic 中生成一个随机的队列 id
     *
     * @param topic 队列所属的 topic
     * @return 一个随机的队列 id
     */
    public static int genRandomQueueId(String topic) {
        return RANDOM.nextInt(
                Container.fetchCommitLogTopicModelByTopic(topic).getQueueList().size()
        );
    }

    /**
     * 获取另一个延迟队列的 id
     *
     * @param currDelayQueueId 当前延迟队列的 id
     * @return 另一个延迟队列的 id
     */
    public static int getOtherDelayQueueId(int currDelayQueueId) {
        return currDelayQueueId == 0 ? 1 : 0;
    }
}
